//
// Abstract Search Class
//
#ifndef __SEARCH_H__
#define __SEARCH_H__
#include "State.h"
#pragma once

typedef unsigned int NI;	// unsigned long long

class Search
{
public:
	// Runs the search.
	// Input: start state
	// Output: cost of solution and the solution path.
	// Returns: true if solution found, otherwise false.
	virtual bool run(State &s, Solution &solution) = 0;
	virtual bool run(State& s, Cost& cost, Solution& solution) = 0;
	
	// Get number of nodes expanded.
	virtual NI getNodesExpanded() = 0;
};

#endif // __SEARCH_H__
